- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.9k
Unify TLS destructor list implementations #116850
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| r? @m-ou-se (rustbot has picked a reviewer for you, use r? to override) | 
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
| The Miri subtree was changed cc @rust-lang/miri | 
| ☔ The latest upstream changes (presumably #116402) made this pull request unmergeable. Please resolve the merge conflicts. | 
9e13c63    to
    abd6645      
    Compare
  
    | ☔ The latest upstream changes (presumably #118126) made this pull request unmergeable. Please resolve the merge conflicts. | 
abd6645    to
    232a3c4      
    Compare
  
    | ☔ The latest upstream changes (presumably #117873) made this pull request unmergeable. Please resolve the merge conflicts. | 
232a3c4    to
    4708bb2      
    Compare
  
    | ☔ The latest upstream changes (presumably #117285) made this pull request unmergeable. Please resolve the merge conflicts. | 
4708bb2    to
    79f310a      
    Compare
  
    | ☔ The latest upstream changes (presumably #120486) made this pull request unmergeable. Please resolve the merge conflicts. | 
Now that the fallback code has been removed, there are no users of `StaticKey` left for targets with native TLS. Therefore, move the at-exit hack to the thread-local guard module, where it can be shared by both implementations, and cfg-out the key-based TLS when it's not needed.
79f310a    to
    5e1727c      
    Compare
  
    | ☔ The latest upstream changes (presumably #121569) made this pull request unmergeable. Please resolve the merge conflicts. | 
| Closing in favour of #126523. | 
Part of #110897.
Currently, nearly every platform implements its own TLS destructor list. This adds unnecessary code and means that issues like #116390 are harder to find and fix. Therefore, this PR unifies all of these implementations into a shared one inside
sys::common::fast_local, leaving behind only the platform calls needed to ensure the list is emptied.This changes behaviour on some Linux-like platforms, because we now keep our own list. This should however not impact performance too much, as the platform calls would also have needed to allocate.
Because it is only used on UNIX and is now much easier, I've removed the fallback implementation in
sys_common. BecauseStaticKeymay now be unused, this resulted in errors for Windows, which is why I have refactored that code to move the at-exit hack to the newthread_local_guardmodule. If it causes too much review pain, I can split this part out.Tested on aarch64 macOS, checked on all other platforms. Best reviewed per-commit.
@rustbot label +T-libs +A-thread-locals